/*
 * んーにゅー紙芝居
 */
#include	<system.h>
#include	<v93.h>
#include	<nt.h>
#include	<farl.h>
#include	<agl.h>
#include	<common.h>
#include	<adp.h>
#include	<libm.h>

int fh;
short KingFile[65536];

unsigned char *filelist[20]={
	"NEC256E.BIN",
	"NNNUUU.BIN",
	"1UP.BIN",
	"ITEM1.BIN",
	"ENEMY11.BIN",
	"ENEMY12.BIN",
	"ENEMY13.BIN",
	"BOSS1.BIN",
	"ITEM2.BIN",
	"ENEMY21.BIN",
	"ENEMY22.BIN",
	"ENEMY23.BIN",
	"BOSS2.BIN",
	"ITEM3.BIN",
	"ENEMY31.BIN",
	"ENEMY32.BIN",
	"ENEMY33.BIN",
	"BOSS3.BIN"};

unsigned char *filelist2[20]={
	"　　ＮＥＣ　　",
	"　んーにゅー　",
	"１ＵＰアイテム",
	"　　 風船 　　",
	"　 ウィルス　 ",
	"　　ＵＦＯ　　",
	"　　 竜巻　　 ",
	"　マヨネーズ　",
	"　　 弗袋　　 ",
	"　　おばけ　　",
	"　　きのこ　　",
	"　　　花　　　",
	"　　 土星　　 ",
	"　 おにぎり　 ",
	"　　　棒　　　",
	"　　 水滴　　 ",
	"　　　魚　　　",
	"　 かぼちゃ　 "};

void InitSystem(void);
void InitScreen(void);
void kingload(unsigned char *filename);

/*
 * メイン
 */
int
main(void)
	{
	int i,buf;
	char tmp;

	// 各種初期化
	cache_enable();                               // キャッシュ開始
	DevInit();                                    // 各種デバイス初期化

	/* 初期化 */
	InitSystem();
	InitScreen();

	KINGScreen(0);                                // 画面モード16m色
	KINGDispOff();                                // HuC6272 表示オフ
	KINGCylinder(KING_BG0,1);                     // 茶筒モード
	KINGChangeSize0(DISP_NORMAL);                 // 画面幅設定
	dispoff(bg | spr | rain | bg1 | bg2 | bg3);   // 他画面オフ
	KINGCls(KING_BG0);                            // 画面消去
	KINGDispOn();                                 // HuC6272 表示オン

	get_pad();
	// 画面描画
	while(1)
		{
		get_pad();
		for ( i = 0 ; i < 18 ; i++ )
			{
			KINGDispOff();
			KINGScreen(1);
			KINGCls(KING_BG0);
			KINGKanjiMode(PSET, YUV_YELLOW);
			KINGPuts(70,100, filelist2[i]);
			KINGDispOn();
			kingload(filelist[i]);
			while(1)
				{
				get_pad();
				if ( pad00.KD_TRG & KP_1 ) break;
				}
			}
		}
	return	0;
	}

/*
 * システム初期化
 */
void
InitSystem()
	{
	irq_disable();
	cache_clear();
	cache_enable();
    set_irq_mask(
		BIT_IRQM_SIO | 
		BIT_IRQM_7A | 
		BIT_IRQM_7B |
		BIT_IRQM_KING |
		BIT_IRQM_KP |
		BIT_IRQM_EXT |
		BIT_IRQM_TMI |
		BIT_IRQM_AERR |
		0
		);

	set_irq_prio(IRQ_PRIOA, IRQ_KP);
	set_irq_vector(&int_pad, IRQ_LEVELA);

    reset_irq_mask(
//			BIT_IRQM_SIO | 
//			BIT_IRQM_7A | 
//			BIT_IRQM_7B |
//			BIT_IRQM_KING |
			BIT_IRQM_KP |
//			BIT_IRQM_EXT |
//			BIT_IRQM_TMI |
//			BIT_IRQM_AERR |
			0
		);

	set_irq_level(0x0007);
	irq_enable();
	init_get_pad();
	get_pad();
	}

/*
 * 画面初期化
 */
void
InitScreen()
	{
	int i;

	init_nt();	// init Hu6261 device
	init_70();
	dispon(bg | spr | bg0 | bg1 | bg2 | bg3 | rain );
	dispoff( /*bg | spr |*/ bg0 | bg1 | bg2 | bg3 | rain );
	set_nt_mode(interlace | inter_sync | mode_5M | mode_sp256 | mode_bg256);

	cel_off(bg);
	cel_off(spr);
	cel_off(bg0);
	cel_off(bg1);
	cel_off(bg2);
	cel_off(bg3);
	cel_off(rain);
	}

/*
 * KINGに描画
 */
void
kingload(unsigned char *filename)
	{
	// ファイル読込
	if ( (fh = pio_fopen(filename, "rb")) == -1 )
		{
		pio_putstr("ファイルが開けません。\n");
		return;
		}
	pio_fread(fh,122880,KingFile);
	pio_fclose(fh);
	KINGDispOff();
	KINGScreen(0);
	KINGCls(KING_BG0);
	KINGTrans(0,KingFile,2);
	KINGDispOn();
	}

